package io.renren.common.utils;

import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;
import java.util.Map.Entry;

import cn.hutool.crypto.digest.DigestUtil;

/**
第一步 ，设所有发送或者接收到的数据为集合M，将集合M内非空参数值的参数按照参数名ASCII码从小到大排序（字典序），使用URL键值对的格式（即key1=value1&key2=value2…）拼接成字符串。
第二步，在stringA最后拼接上key得到stringSignTemp字符串，并对stringSignTemp进行MD5运算，再将得到的字符串所有字符转换为大写，得到sign值signValue。

 */
public class ASCIIUtil {
	
	 //按照ASCII码排序
	   public static String createAccsiiAscStr(SortedMap<String, Object> parameters) {
	        StringBuffer sb = new StringBuffer();
	        Iterator<Entry<String, Object>> it = parameters.entrySet().iterator();//所有参与传参的参数按照accsii排序（升序）
	        while (it.hasNext()) {
	            Map.Entry<String, Object> entry = (Entry<String, Object>) it.next();
	            String k = (String) entry.getKey();
	            Object v = entry.getValue();
	            if (null != v && !"".equals(v)) {//空值不传递，不参与签名组串
	                sb.append(k + "=" + v + "&");
	            }
	        }
	        String resultstr = sb.toString().substring(0,sb.toString().length()-1);
	        System.err.println("待签名字符串:" + resultstr);//排序后的字符串
	        return resultstr ;
	   }
	   
	   //MD5签名
	   public static String createSginStr(String accsiiAscStr,String md5str) {
		   String str=accsiiAscStr+"&key="+md5str;
		   System.err.println(str);
		   String reststr=DigestUtil.md5Hex(str).toUpperCase();
		   System.err.println(reststr);
		   return reststr ;
	   }
}
